// API配置文件
const config = {
  // 开发环境
  dev: {
    baseURL: 'http://localhost:9999'
  },
  // 生产环境（部署后修改为实际域名）
  prod: {
    baseURL: 'https://your-domain.com'
  }
}

// 当前环境（开发时使用dev，部署时改为prod）
const currentEnv = 'dev'
const BASE_URL = config[currentEnv].baseURL

/**
 * 封装wx.request
 * @param {String} url - 接口路径
 * @param {Object} data - 请求参数
 * @param {String} method - 请求方法
 * @param {Boolean} needToken - 是否需要token
 */
function request(url, data = {}, method = 'GET', needToken = false) {
  return new Promise((resolve, reject) => {
    const header = {
      'content-type': 'application/json'
    }
    
    // 如果需要token，从缓存中获取并添加到请求头
    if (needToken) {
      const token = wx.getStorageSync('token')
      if (token) {
        header['Authorization'] = `Bearer ${token}`
      }
    }

    wx.request({
      url: BASE_URL + url,
      data: data,
      method: method,
      header: header,
      success: (res) => {
        if (res.statusCode === 200) {
          // 判断业务状态码（后端返回"0"表示成功）
          if (res.data.code === '1000' || res.data.code === '0' || res.data.code === 0) {
            resolve(res.data.data)
          } else {
            // 业务错误
            console.error('API业务错误：', res.data);
            wx.showToast({
              title: res.data.msg || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else {
          // HTTP错误
          console.error('HTTP错误：', res);
          wx.showToast({
            title: '网络请求失败',
            icon: 'none'
          })
          reject(res)
        }
      },
      fail: (err) => {
        console.error('请求失败：', err);
        wx.showToast({
          title: '网络连接失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// ==================== 歌手相关API ====================

/**
 * 获取歌手列表（全部）
 */
function getSingerList() {
  return request('/singer/list')
}

/**
 * 获取歌手列表（分页）
 * @param {Number} pageNo - 页码
 * @param {Number} pageSize - 每页数量
 */
function getSingerPage(pageNo = 1, pageSize = 10) {
  return request('/singer/page', { pageNo, pageSize })
}

/**
 * 获取歌手详情
 * @param {Number} id - 歌手ID
 */
function getSingerDetail(id) {
  return request('/singer/detail', { id })
}

/**
 * 获取歌手的所有歌曲
 * @param {Number} id - 歌手ID
 */
function getSingerSongs(id) {
  return request('/singer/song', { id })
}

// ==================== 歌曲相关API ====================

/**
 * 获取歌曲列表（分页）
 * @param {Number} pageNo - 页码
 * @param {Number} pageSize - 每页数量
 * @param {Number} singerId - 歌手ID（可选）
 * @param {String} name - 歌曲名（可选，用于搜索）
 */
function getSongPage(pageNo = 1, pageSize = 10, singerId = null, name = null) {
  const data = { pageNo, pageSize }
  if (singerId) data.singerId = singerId
  if (name) data.name = name
  return request('/song/page', data)
}

/**
 * 获取歌曲详情
 * @param {Number} id - 歌曲ID
 */
function getSongDetail(id) {
  return request('/song/detail', { id })
}

/**
 * 搜索歌曲
 * @param {String} keyword - 搜索关键词
 */
function searchSong(keyword) {
  return request('/song/page', { name: keyword, pageSize: 50 })
}

// ==================== 歌单相关API ====================

/**
 * 获取歌单列表（全部）
 */
function getSongListAll() {
  return request('/song-list/list')
}

/**
 * 获取歌单列表（分页）
 * @param {Number} pageNo - 页码
 * @param {Number} pageSize - 每页数量
 */
function getSongListPage(pageNo = 1, pageSize = 10) {
  return request('/song-list/page', { pageNo, pageSize })
}

/**
 * 获取歌单详情
 * @param {Number} id - 歌单ID
 */
function getSongListDetail(id) {
  return request(`/song-list/detail/${id}`)
}

/**
 * 获取歌单中的所有歌曲
 * @param {Number} songListId - 歌单ID
 */
function getSongListSongs(songListId) {
  return request(`/song-list/songs/detail/${songListId}`)
}

// ==================== 评论相关API ====================

/**
 * 获取评论列表
 * @param {Number} pageNo - 页码
 * @param {Number} pageSize - 每页数量
 * @param {Number} type - 评论类型（0-歌曲，1-歌单）
 * @param {Number} songId - 歌曲ID（type=0时使用）
 * @param {Number} songListId - 歌单ID（type=1时使用）
 */
function getCommentPage(pageNo = 1, pageSize = 20, type = 0, songId = null, songListId = null) {
  const data = { pageNo, pageSize, type }
  if (type === 0 && songId) data.songId = songId
  if (type === 1 && songListId) data.songListId = songListId
  return request('/comment/page', data)
}

/**
 * 获取热门评论（按点赞数排序）
 */
function getHotComments(pageNo = 1, pageSize = 20, type = 0, songId = null, songListId = null) {
  const data = { pageNo, pageSize, type }
  if (type === 0 && songId) data.songId = songId
  if (type === 1 && songListId) data.songListId = songListId
  return request('/comment/pageByLikes', data)
}

// ==================== 管理员相关API ====================

/**
 * 管理员登录
 * @param {String} name - 用户名
 * @param {String} password - 密码
 */
function adminLogin(name, password) {
  return request('/admin/login', { name, password }, 'POST')
}

// ==================== 用户相关API ====================

/**
 * 添加或更新用户信息
 * @param {Object} userInfo - 用户信息
 */
function saveUserInfo(userInfo) {
  return request('/consumer/add', userInfo, 'POST')
}

/**
 * 根据OpenID获取用户信息
 * @param {String} openid - 微信OpenID
 */
function getUserByOpenId(openid) {
  return request('/consumer/detail', { openid })
}

/**
 * 更新用户信息
 * @param {Object} userInfo - 用户信息
 */
function updateUserInfo(userInfo) {
  return request('/consumer/update', userInfo, 'POST')
}

/**
 * 获取用户列表
 */
function getUserList() {
  return request('/consumer/list')
}

// ==================== 导出所有API ====================

module.exports = {
  BASE_URL,
  // 歌手
  getSingerList,
  getSingerPage,
  getSingerDetail,
  getSingerSongs,
  // 歌曲
  getSongPage,
  getSongDetail,
  searchSong,
  // 歌单
  getSongListAll,
  getSongListPage,
  getSongListDetail,
  getSongListSongs,
  // 评论
  getCommentPage,
  getHotComments,
  // 管理员
  adminLogin,
  // 用户
  saveUserInfo,
  getUserByOpenId,
  updateUserInfo,
  getUserList,
  // 通用请求方法
  request
}

